﻿// 3677. 选球问题.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;
/*
https://www.acwing.com/problem/content/3680/

现有 a−z共 26种球，权值从 a到 z依次为 1,2,3…26
，现从已有的 n个球中选出固定 k 个从左到右排列，要求右边的球权值至少比左边大 2
，在给定 n和 k的情况下，求最小权重和。

输入格式
输入包含多组测试数据。

每组数据第一行包含两个整数 n,k。

第二行包含 n个小写字母构成的字符串。

输出格式
每组数据输出一行答案，表示最小权重和，如果不存在，则输出 −1。

数据范围
1≤k≤n≤50
输入样例：
5 3
xyabd
输出样例：
29
*/

vector<int>  v;
int n, k;
const int N = 100;

int selcnt = 0;
int selweight = 0;
int ans = 999999999;
int last = 0;

void solve() {
	for (int i = 0; i < n; i++) {
		char c; cin >> c;
		v.push_back(c - 'a' + 1);
	}
	sort(v.begin(), v.end());

	v.insert(v.begin(), -100);

	int ans = 0; int curr = -1000;
	int selcnt = 0;
	for (int i = 1; i < v.size(); i++) {
		if (v[i] - curr >= 2) {
			selcnt++; ans += v[i];
			curr = v[i];
		}
		if (selcnt == k) {
			cout << ans << endl;
			return;
		}
	}

	cout << -1 << endl;
}

int main()
{
	while (cin >> n >> k) {
		v.clear();
		selcnt = 0;
		selweight = 0;
		ans = 999999999;
		last = 0;

		solve();
	}
	

	return 0;
}

 